package com.example.monitoring.service;

import com.example.monitoring.model.MonitoringResult;

import java.util.List;
import java.util.Map;

/**
 * 监控服务接口
 * 
 * @author rsz
 * @since 2024-04-13
 */
public interface MonitoringService {
    
    /**
     * 检查所有目标服务的健康状态
     *
     * @return 所有服务的健康状态列表
     */
    List<Boolean> checkAllTargetServicesHealth();
    
    /**
     * 检查指定索引的目标服务健康状态
     *
     * @param index 目标服务索引
     * @return 服务健康状态
     */
    boolean checkTargetServiceHealth(int index);
    
    /**
     * 检查目标服务的健康状态 (首个服务，向后兼容)
     *
     * @return 服务健康状态
     */
    boolean checkTargetServiceHealth();
    
    /**
     * 监控JVM
     *
     * @return 监控结果
     */
    MonitoringResult monitorJvm();
    
    /**
     * 监控Redis
     *
     * @return 监控结果
     */
    MonitoringResult monitorRedis();
    
    /**
     * 监控Elasticsearch
     *
     * @return 监控结果
     */
    MonitoringResult monitorElasticsearch();
    
    /**
     * 监控MySQL
     *
     * @return 监控结果
     */
    MonitoringResult monitorMysql();
    
    /**
     * 监控MinIO
     *
     * @return 监控结果
     */
    MonitoringResult monitorMinio();
    
    /**
     * 监控系统资源（磁盘、内存、进程、端口等）
     *
     * @return 监控结果
     */
    MonitoringResult monitorSystem();
    
    /**
     * 检查网络服务的连通性
     *
     * @return 监控结果列表
     */
    List<MonitoringResult> checkNetworkConnectivity();
    
    /**
     * 获取所有监控结果
     *
     * @return 监控结果列表
     */
    List<MonitoringResult> getAllMonitoringResults();
    
    /**
     * 获取中间件配置状态
     *
     * @return 各个中间件的配置状态
     */
    Map<String, Boolean> getMiddlewareConfigStatus();
    
    /**
     * 导出监控报告
     *
     * @return 导出的HTML文件路径
     */
    String exportReport();
} 